package com.night.icm.service.base.service;

import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.common.utils.SimpleDataDTO;
import com.night.icm.model.base.ClassDTO;

import java.util.List;

/**
 * ClassService
 *
 * @author Liao ZhiYong
 * @date 2020/1/28
 */
public interface ClassService {

    /**
     * 分页查询班级
     *
     * @param page         页号，从0开始
     * @param size         每页纪录条数
     * @param sort         排序字段, 例如：字段1,asc,字段2,desc
     * @param code         班级编号
     * @param name         班级名称
     * @param grade        年级
     * @param academyId    学院id
     * @param professionId 专业id
     * @return 班级信息
     */
    PageDataDTO<ClassDTO> findOnePage(int page, int size, String sort, String code, String name, String grade, String academyId, String professionId);

    /**
     * 新增班级
     *
     * @param classDTO     班级信息
     * @return 新增班级
     */
    ClassDTO create(ClassDTO classDTO);

    /**
     * 删除班级
     *
     * @param id 班级id
     */
    void delete(String id);

    /**
     * 更新班级信息
     *
     * @param id       班级id
     * @param classDTO 班级信息
     * @return 更新后班级信息
     */
    ClassDTO update(String id, ClassDTO classDTO);

    /**
     * 根据id查找班级信息
     *
     * @param id 班级id
     * @param isGetStudent 是否获取学生
     * @return 班级信息
     */
    ClassDTO findById(String id, Boolean isGetStudent);

    /**
     * 查找所有班级信息，可选择排序
     *
     * @param param   排序参数
     * @param pattern 排序模式: asc/desc
     * @return 班级信息
     */
    List<ClassDTO> findAll(String param, String pattern);

    /**
     * 检查班级code在本专业中是否已存在
     *
     * @param professionId 专业id
     * @param code         班级code
     * @return 是否存在
     */
    SimpleDataDTO<Boolean> checkCodeExist(String professionId, String code);

    /**
     * 统计班级数量
     *
     * @return 统计班级数量
     */
    Long countClass();
}
